var Gallery={Album:{}};Gallery.Album.Dialog=Class.extend({_createdCallbacks:[],_descriptionError:null,_dialog:null,_dialogContainer:null,_saveCallbacks:[],_proxy:null,_titleError:null,_updatedCallbacks:[],_validationCallbacks:[],init:function(){this._proxy=new WCF.Action.Proxy({success:$.proxy(this._success,this)})},_cancel:function(){this._dialogContainer.wcfDialog("close")},_hideDescriptionError:function(){this._descriptionError&&(this._descriptionError.hide(),this._dialog.find('textarea[name="description"]').parents("dl").removeClass("formError"))},_hideTitleError:function(){this._titleError&&(this._titleError.hide(),this._dialog.find('input[name="title"]').parents("dl").removeClass("formError"))},_save:function(){var e,t,i,a=!1,s=this._dialog.find('input[name="title"]').val();for(t in s.length?s.length>255?(a=!0,this._showTitleError(WCF.Language.get("gallery.album.title.error.tooLong"))):this._hideTitleError():(a=!0,this._showTitleError(WCF.Language.get("wcf.global.form.error.empty"))),(e=this._dialog.find('textarea[name="description"]').val()).length>65535?(a=!0,this._showDescriptionError(WCF.Language.get("gallery.album.description.error.tooLong"))):this._hideDescriptionError(),this._validationCallbacks)this._validationCallbacks[t](this._dialogContainer)||(a=!0);if(!a){for(t in this._dialogContainer.find("button").disable(),i={accessLevel:this._dialog.find('select[name="accessLevel"] > option:selected').val()||0,description:e,title:s},this._saveCallbacks)i=this._saveCallbacks[t](i);this._dialogContainer.data("albumID")?this._proxy.setOption("data",{actionName:"update",className:"gallery\\data\\album\\AlbumAction",objectIDs:[this._dialogContainer.data("albumID")],parameters:{data:i}}):this._proxy.setOption("data",{actionName:"createAlbum",className:"gallery\\data\\album\\AlbumAction",parameters:{data:i}}),this._proxy.sendRequest()}},_showDialog:function(e,t){var i,a;null===this._dialog?(this._dialogContainer=$('
'))}},_updateImage:function(e,t,i){var a,s;"delete"===t?(a=this,s=this._elements[e].data("objectID"),new WCF.Action.Proxy({autoSend:!0,data:{actionName:"delete",className:"gallery\\data\\image\\ImageAction",objectIDs:[s]},success:function(e){a._redirectURL?window.location=a._redirectURL:window.location.reload()}})):(this._updateData.push({data:i,elementID:e,optionName:t}),this._proxy.setOption("data",{actionName:t,className:"gallery\\data\\image\\ImageAction",objectIDs:[this._elements[e].data("objectID")],parameters:{data:i}}),this._proxy.sendRequest())},_updateState:function(e){var t,i,a,s,n;if("image"!=this._environment||1!=this._updateData.length||"trash"!=this._updateData[0].optionName||this._getPermission("canViewDeletedImage"))for(this._notification.show(),t=0,i=this._updateData.length;t').appendTo($("#image")),this._currentVideoContainer=$("#currentVideoContainer"),this._video=$('').appendTo($("#video")),this._currentVideoLinkContainer=$("#currentVideoLinkContainer"),this._videoLink=$("#videoLink"),this._thumbnailAreaSelector=new Gallery.Image.ThumbnailAreaSelector(this),this.getOption("tmpHash")&&(this._uploadHandler=new Gallery.Image.Upload(this,this.getOption("maxParallelUploads")),(this.getFreeImageCount()>0||this.getFreeUploadedVideoCount()>0||this.getFreeVideoLinkCount()>0)&&this._thumbnailListContainer.show(),this.getFreeImageCount()<=0&&this.getFreeUploadedVideoCount()<=0&&this._uploadHandler.hideUploadButton(),this.getFreeImageCount()<=0&&this.getFreeUploadedVideoCount()<=0&&this.getFreeVideoLinkCount()<=0&&(this._uploadWarning=$(".jsGalleryUploadWarning"))),this._imageProcessor=new Gallery.Image.Processor(this),$("#imageToogle").click($.proxy(this._toggleImage,this)),$("#videoToogle").click($.proxy(this._toggleVideo,this)),$("#videoLinkToogle").click($.proxy(this._toggleVideoLink,this)),require(["Ui/Screen"],(e=>{e.on("screen-md-up",{setup:()=>{this._previousImageButton=this._imageContainer.children(".galleryPreviousImageButton").click($.proxy(this._showPreviousImage,this)),this._nextImageButton=this._imageContainer.children(".galleryNextImageButton").click($.proxy(this._showNextImage,this)),this._imageContainer.data("visibleNextPreviousButtons",!1),$(window).on("scroll",$.proxy(this._scroll,this)),$(window).on("resize",$.proxy(this._scroll,this))}})}))},_getRedirectUrl:function(){var e,t,i,a;if(this.getOption("redirectURL"))return this.getOption("redirectURL");for(a in e=this.getImages(),t=$.getLength(e),i=0,e)(e[a].get("isVideo")||e[a].get("isVideoLink"))&&i++;return t==i?this.getOption("redirectVideoURL"):this.getOption("redirectImageURL")},_toggleImage:function(e){var t=$(e.currentTarget);t.children(".icon").toggleClass("fa-chevron-right").toggleClass("fa-chevron-down"),t.parent().next("small").toggle(),$(".jsImageButton").toggle(),$("#image").toggle()},_toggleVideo:function(e){$(e.currentTarget).children(".icon").toggleClass("fa-chevron-right").toggleClass("fa-chevron-down"),$(".jsVideoButton").toggle(),$("#video").toggle()},_toggleVideoLink:function(e){$(e.currentTarget).children(".icon").toggleClass("fa-chevron-right").toggleClass("fa-chevron-down"),$(".jsVideoLinkButton").toggle(),$("#videoLink").toggle()},_pauseVideo:function(){var e=this._video[0];e.pause(),this.getActiveImage().set("__videoTimestamp",e.currentTime)},_getImageIDs:function(){var e,t=[];for(e in this._images)t.push(e);return t},_getRequestData:function(){var e,t,i,a,s=[],n={},r=0;for(e in this._images){for(a in t=0,(i=this._images[e].getData()).__useCoordinates||(i.latitude=0,i.longitude=0,i.location=""),i)"__"==a.substr(0,2)?delete i[a]:$.isArray(i[a])?t+=i[a].length:$.isPlainObject(i[a])?t+=$.getLength(i[a]):t++;r+$.getLength(i)>this.getOption("maxInputVars")-150&&(s.push(n),n={},r=0),n[e]=i,r+=t}return s.push(n),s},_handleSavedImageData:function(e){var t,i,a,s;if(void 0!==e.thumbnailImageIDs&&e.thumbnailImageIDs.length)for(a in new WCF.System.Notification(WCF.Language.get("gallery.image.upload.info.thumbnailGeneration"),"info").show(void 0,5e3),t=new Gallery.Image.ThumbnailGenerator,i=0,e.thumbnailImageIDs)t.generateThumbnails(e.thumbnailImageIDs[a],$.proxy((function(){++i==e.thumbnailImageIDs.length&&(this._saveRequestCount--,this._saveRequestCount||(window.location=this._getRedirectUrl()))}),this),!0);else if(void 0!==e.errors){for(s in this._images)this.getImage(s).setErrors(e.errors[s]||{}),e.errors[s]&&this.getImage(s).getThumbnailContainer().addClass("imageError");this._showErrorMessage()}else this._saveRequestCount--,this._saveRequestCount||(window.location=this._getRedirectUrl())},_hideNextPreviousButtons:function(){this._previousImageButton&&this._imageContainer.data("visibleNextPreviousButtons")&&(this._previousImageButton.addClass("hidden"),this._nextImageButton.addClass("hidden"),this._imageContainer.data("visibleNextPreviousButtons",!1),this._imageContainer.removeClass("galleryHasNextPreviousImageButtons"))},_overwriteData:function(){WCF.System.Confirmation.show(WCF.Language.get("gallery.image.overwriteData.confirmMessage"),(function(e){"confirm"===e&&(WCF.System.Event.fireEvent("com.woltlab.gallery.imageHandler","overwriteData"),(new WCF.System.Notification).show())}))},_readOrderedImageIDs:function(){this._orderedImageIDs=[],this._thumbnailList.children().each(function(e,t){var i=$(t).data("imageID");i&&this._orderedImageIDs.push(i)}.bind(this))},_refreshNextPreviousButtons:function(){if(this._previousImageButton&&this._previousImageButton.is(":visible")){var e=this._orderedImageIDs.indexOf(this._activeImageID);switch(this._previousImageButton.removeClass("disabled"),this._nextImageButton.removeClass("disabled"),e){case 0:this._previousImageButton.addClass("disabled");break;case this._orderedImageIDs.length-1:this._nextImageButton.addClass("disabled")}}},_rotateImage:function(e,t){t||!this.getActiveImage().get("thumbnailWidth")?(this._proxy.setOption("data",{actionName:"rotateImage",className:"gallery\\data\\image\\ImageAction",objectIDs:[this.getActiveImage().getImageID()],parameters:{angle:e?$(e.currentTarget).data("angle"):t}}),this._proxy.sendRequest()):WCF.System.Confirmation.show(WCF.Language.get("gallery.image.rotate.confirmMessage"),$.proxy((function(t){"confirm"===t&&this._rotateImage(null,$(e.currentTarget).data("angle"))}),this))},_save:function(){this._saveButton.disable(),this.setActiveImage(this.getActiveImage()),this.validate()?(null!==this._errorMessage&&this._errorMessage.hide(),this._sendRequests()):this._showErrorMessage()},_scroll:function(){var e,t,i,a;this._previousImageButton&&this._previousImageButton.is(":visible")&&(e=$(window).scrollTop()+$(window).height()/2,i=(t=this._imageContainer.offset().top)+this._imageContainer.height(),e-(a=100)>=t&&e+a<=i&&(this._previousImageButton.css("top",e-t+"px"),this._nextImageButton.css("top",e-t+"px")))},_sendRequests:function(){var e,t=this._getRequestData();for(e in this._saveRequestCount=t.length,t)this._proxy.setOption("data",{actionName:"saveImageData",className:"gallery\\data\\image\\ImageAction",objectIDs:Object.keys(t[e]),parameters:{data:t[e],isEdit:this.getOption("tmpHash")?0:1}}),this._proxy.sendRequest()},_showErrorMessage:function(){this.setActiveImage(this.getActiveImage()),null===this._errorMessage&&(this._errorMessage=$('').text(WCF.Language.get(this.getOption("tmpHash")?"gallery.image.upload.error.markedImages":"wcf.global.form.error")).hide().insertBefore("#thumbnailListContainer"),this._scrollEffect=new WCF.Effect.Scroll),this._scrollEffect.scrollTo(this._errorMessage),this._errorMessage.show(),this._saveButton.enable()},_showNextImage:function(){var e=this._orderedImageIDs.indexOf(this._activeImageID);e+1').text(e).insertBefore(this._thumbnailListContainer):e,$('').appendTo(t).click((function(){$(this).parent().wcfFadeOut((function(){$(this).remove()}))}))},addImage:function(e,t){var i,a;if(this._thumbnailListContainer.is(":visible")||!this.getOption("tmpHash")&&!$.getLength(this._images)||this._thumbnailListContainer.show(),this.getOption("tmpHash"))for(i in this._initialData)t.set(i,this._initialData[i]);for(a in this._images[e]=t,this._readOrderedImageIDs(),t.setImageHandler(this),this._callbacks.addImage)this._callbacks.addImage[a](t);$.getLength(this._images)>1?(this._overwriteDataButtons.show(),this._showNextPreviousButtons()):this._hideNextPreviousButtons()},addInitialData:function(e,t){this._initialData[e]=t},getActiveImage:function(){return void 0!==this._images[this._activeImageID]?this._images[this._activeImageID]:null},getDataHandler:function(e,t){if(void 0===t&&(t="image"),"image"!==t&&"video"!==t&&"videoLink"!==t)throw new Error("Unknown type '"+t+'".');return void 0!==this._dataHandlers[t][e]?this._dataHandlers[t][e]:null},getDataHandlers:function(e){if(void 0===e&&(e="image"),"image"!==e&&"video"!==e&&"videoLink"!==e)throw new Error("Unknown type '"+e+'".');return this._dataHandlers[e]},getActiveImageDataHandlers:function(){return this.getDataHandlers(this.getActiveImage().getType())},getImage:function(e){return void 0!==this._images[e]?this._images[e]:null},getImageNode:function(){return this._image},getImageProcessor:function(){return this._imageProcessor},getImages:function(){return this._images},registerCallback:function(e,t){return"addImage"!=e&&"removeImage"!=e?(console.debug("[Gallery.Image.Handler] Unknown callback event '"+e+"'"),!1):$.isFunction(t)?void this._callbacks[e].push(t):(console.debug("[Gallery.Image.Handler] Callback for '"+e+"' is invalid"),!1)},removeDataHandler:function(e,t){if(void 0!==t&&"image"!==t&&"video"!==t&&"videoLink"!==t)throw new Error("Unknown type '"+t+'".');if(void 0===t){var i=!1;return void 0!==this._dataHandlers.image[e]&&(delete this._dataHandlers.image[e],i=!0),void 0!==this._dataHandlers.video[e]&&(delete this._dataHandlers.video[e],i=!0),void 0!==this._dataHandlers.videoLink[e]&&(delete this._dataHandlers.videoLink[e],i=!0),i}return void 0!==this._dataHandlers[t][e]&&(delete this._dataHandlers[t][e],!0)},removeImage:function(e){if(void 0!==this._images[e]){for(var t in this._images[e].remove(),delete this._images[e],this._orderedImageIDs.splice(this._orderedImageIDs.indexOf(e)),this._callbacks.removeImage)this._callbacks.removeImage[t](e);return $.getLength(this._images)?e==this._activeImageID&&(this._activeImageID=0,$("#thumbnailList > li:eq(0)").each($.proxy((function(e,t){this.setActiveImage(this._images[$(t).data("imageID")])}),this))):(this._imageContainer.hide(),this._activeImageID=0),1==$.getLength(this._images)&&this._overwriteDataButtons.hide(),$.getLength(this._images)<=1?this._hideNextPreviousButtons():this._showNextPreviousButtons(),this._readOrderedImageIDs(),!0}return!1},removeImageByClick:function(e){WCF.System.Confirmation.show(WCF.Language.get("gallery.image.delete.confirmMessage"),$.proxy((function(t){"confirm"===t&&(this._proxy.setOption("data",{actionName:"delete",className:"gallery\\data\\image\\ImageAction",objectIDs:[$(e.currentTarget).data("imageID")],parameters:{returnUserImageCount:1}}),this._proxy.sendRequest())}),this))},setActiveImage:function(e,t){var i,a,s,n,r,o,l;if(!1!==t&&(t=!0),this._activeImageID){if(i=this._images[this._activeImageID].getData(),t){for(s in a=this.getActiveImageDataHandlers())a[s].readData(),i=$.extend(i,a[s].getData());this._images[this._activeImageID].setData(i)}i.isVideo&&this._pauseVideo()}switch(this._activeImageID=e.getImageID(),$("#thumbnailList").children("li").removeClass("active"),e.getThumbnailContainer().addClass("active"),n=this.getActiveImage().getType()){case"image":this._currentImageContainer.show(),this._currentVideoContainer.hide(),this._currentVideoLinkContainer.hide(),this._image.attr("src",e.get("url")).on("load",$.proxy(this._thumbnailAreaSelector.refresh,this._thumbnailAreaSelector)),this._rotateImageButtons.show().each($.proxy((function(e,t){var i=$(t);i.data("angle")%180&&(this.getActiveImage().get("width")').text(WCF.Language.get("gallery.image.upload.error.tooManyUploads")).insertBefore(this._thumbnailListContainer)))},getFreeImageCount:function(){return this.getOption("maxUserImageCount")-this.getOption("userImageCount")},getFreeUploadedVideoCount:function(){return null===this.getOption("maxUserUploadedVideoCount")?0:this.getOption("maxUserUploadedVideoCount")-this.getOption("userUploadedVideoCount")},getFreeVideoLinkCount:function(){return null===this.getOption("maxUserVideoLinkCount")?0:this.getOption("maxUserVideoLinkCount")-this.getOption("userVideoLinkCount")},validate:function(){var e,t=!0;for(e in this._images)this._images[e].validate()||(t=!1);return t},getOption:function(e){return e in this._options?this._options[e]:null},setOption:function(e,t){this._options[e]=t},getTmpHash:function(){throw new Error("Use `getOption('tmpHash')` instead.")},setRedirectURL:function(e){throw new Error("Use `setOption('redirectURL', redirectURL)` instead.")},startUpload:function(){this._saveButton.disable()},finishUpload:function(){this._saveButton.enable()},updateRestrictions:function(e){$("#galleryUploadRestrictions").html($(e).html())}}),Gallery.Image.ImageGrid=Class.extend({_activeElement:-1,_baseInterval:3e3,_elements:[],_images:[],_intervalModifier:1,_isHover:!1,_pe:null,init:function(e,t){if(this._images=t,this._images.length<2)console.debug("[Gallery.Image.ImageGrid] At least two images are required but "+t.length+" are given, aborting.");else{var i=document.getElementById(e);null!==!i?(this._initElements(i),this._pe=new WCF.PeriodicalExecuter(this.cycleImages.bind(this),this._baseInterval*this._intervalModifier),this._initEventListener(i)):console.debug("[Gallery.Image.ImageGrid] Container '"+e+"' is missing, aborting.")}},_initElements:function(e){var t,i;this._elements=[].slice.call(e.children),t=document.createElement("a"),i=document.createElement("span"),t.appendChild(i),this._elements[0].appendChild(t),this._elements[0].setAttribute("data-active-image",0),this._elements[0].setAttribute("data-image-index",0),this._elements[1]&&this._elements[1].setAttribute("data-image-index",3),this._elements[2]&&this._elements[2].setAttribute("data-image-index",7),2===this._elements.length?this._intervalModifier=1.5:1===this._elements.length&&(this._intervalModifier=2)},_initEventListener:function(e){var t,i;e.addEventListener("mouseover",function(){this._isHover=!0}.bind(this)),e.addEventListener("mouseout",function(){this._isHover=!1}.bind(this)),t=this._elements.length,(i=function(){var e,i=this._elements[0].offsetTop,a=1;t>1&&this._elements[1].offsetTop===i&&(a=2,3===t&&this._elements[2].offsetTop===i&&(a=3)),e=2,2===a?e=1.5:3===a&&(e=1),e!==this._intervalModifier&&(this._intervalModifier=e,this._pe.setInterval(this._baseInterval*this._intervalModifier))}.bind(this))(),window.addEventListener("resize",i)},cycleImages:function(){var e,t,i,a,s,n,r,o;this._isHover||(e=0,this._activeElement++,this._activeElement===this._elements.length&&(this._activeElement=e),t=this._elements[this._activeElement],this._activeElement===e?((i=parseInt(t.getAttribute("data-image-index"))+1)===this._images.length&&(i=0),2===(a=parseInt(t.getAttribute("data-active-image"))+1)&&(a=0),(s=new Image).src=this._images[i].src,(n=t.children[a]).setAttribute("href",this._images[i].url),n.classList.add("active"),n.children[0].style.setProperty("background-image","url("+this._images[i].src+")"),n.children[0].setAttribute("data-title",this._images[i].title),t.children[1===a?0:1].classList.remove("active"),t.setAttribute("data-active-image",a),t.setAttribute("data-image-index",i),s.complete?t.classList.add("hideLoading"):(t.classList.remove("hideLoading"),n.children[0].classList.add("imageLoading"),s.addEventListener("load",function(){t.classList.add("hideLoading"),n.children[0].classList.remove("imageLoading")}.bind(this)))):(t.children.length>2&&t.removeChild(t.children[t.children.length-1]),(i=parseInt(t.getAttribute("data-image-index"))+1)===this._images.length&&(i=0),(r=document.createElement("li")).classList.add("imageGridItemOffset"),(o=document.createElement("a")).setAttribute("href",this._images[i].url),o.setAttribute("data-title",this._images[i].title),r.appendChild(o),(s=document.createElement("img")).setAttribute("src",this._images[i].src),o.appendChild(s),t.insertBefore(r,this._elements[this._activeElement].children[0]),t.setAttribute("data-image-index",i),s.complete||(s.classList.add("imageLoading"),s.addEventListener("load",(function(){s.classList.remove("imageLoading")}))),setTimeout((function(){r.classList.remove("imageGridItemOffset")}),10),t.offsetTop>this._elements[0].offsetTop&&setTimeout(this.cycleImages.bind(this),20)))}}),Gallery.Image.ImagesInMotion=Class.extend({_container:null,_effectOptions:{},init:function(e,t,i){var a,s,n,r;if(t.length<2)console.debug("[Gallery.Image.ImagesInMotion] At least two images are required but "+t.length+" are given, aborting.");else if(this._container=$("#"+e),this._container.length){for(this._effectOptions=i||{},shuffle(t),a=null,s=!1,n=0,r=t.length;n').data("imageData",t[n]).appendTo(this._container),0===n&&(a.get(0).complete?s=!0:a.on("load",$.proxy(this._initKenBurnsEffect,this)));s&&this._initKenBurnsEffect()}else console.debug("[Gallery.Image.ImagesInMotion] Container id '"+e+"' is invalid, aborting.")},_initKenBurnsEffect:function(){this._container.removeClass("loading").kenburns(this._effectOptions)}}),$.widget||($.widget=function(){}),$.widget("gallery.kenburns",{_activeCanvas:1,_animationIDs:[],_canvases:[],_caption:null,_current:{height:0,width:0,x:0,y:0},_images:[],_imageData:[],_index:-1,_link:null,_resumeAnimationCallbacks:[],_supportedAlignments:[],_updateCanvasDimensionsCallbacks:[],_userAvatar:null,options:{duration:7e3,randomizeZoom:!0,zoomFactor:.9},_create:function(){this._activeCanvas=1,this._animationIDs=[0,0],this._images=[],this._imageData=[],this._index=-1,this._resumeAnimationCallbacks=[null,null],this._updateCanvasDimensionsCallbacks=[null,null],this._supportedAlignments=["top","left","bottom","center","right"],this._canvases=[$('').appendTo(this.element).get(0),$('').appendTo(this.element).get(0)],this._link=$('').appendTo(this.element),this._userAvatar=$("").addClass("userAvatarImage").appendTo(this._link),this._caption=$("").appendTo(this._link),this.updateCanvasDimensions(),this.options.zoomFactor=Math.abs(this.options.zoomFactor),this.options.zoomFactor=Math.min(Math.max(this.options.zoomFactor,.5),1.5),this.element.children("img").each($.proxy((function(e,t){this._images.push(t),this._imageData.push($(t).data("imageData"))}),this)),WCF.PageVisibilityHandler.addCallback("gallery.kenburns."+this.element.wcfIdentify().hashCode(),$.proxy((function(e){e?this.pause():this.resume()}),this)),$(window).resize($.proxy(this.updateCanvasDimensions,this)),this.start()},updateCanvasDimensions:function(){var e=this.element.getDimensions("inner");this._canvases[0].height=e.height,this._canvases[0].width=e.width,this._canvases[1].height=e.height,this._canvases[1].width=e.width,this._updateCanvasDimensionsCallbacks[0]&&this._updateCanvasDimensionsCallbacks[0](),this._updateCanvasDimensionsCallbacks[1]&&this._updateCanvasDimensionsCallbacks[1]()},start:function(){var e,t,i,a=-1===this._index;this._index++,this._index===this._images.length&&(this._index=0),$(this._canvases[this._activeCanvas]).removeClass("primary").addClass("secondary"),this._activeCanvas=this._activeCanvas?0:1,e=this._canvases[this._activeCanvas],$(e).addClass("primary").removeClass("secondary"),t=this._images[this._index],this._current=this.getCurrentImageDimensions(t,e),i=this._imageData[this._index],this._caption.html(i.title),this._link.prop("href",i.link),this._userAvatar.prop("src",i.avatar),this._render(e,a)},getCurrentImageDimensions:function(e,t){var i,a={height:Math.floor(t.width/e.width*e.height),width:t.width,x:0,y:0};return a.heightd?(g=(_.options.duration-l)/1e3,m||(m=!0,_.start())):g=1,I.clearRect(0,0,e.width,e.height),I.globalAlpha=g,I.drawImage(w,0,0,w.width,w.height,C.x,C.y,C.width,C.height),u=!1,y>1?(a=1+s*l)r&&(u=!0),u?_._animationIDs[f]=requestAnimationFrame(i):(_._resumeAnimationCallbacks[f]=null,_._updateCanvasDimensionsCallbacks[f]=null)}var a,s,n,r,o,l,g,h,d,m,c,u,_,p=this._supportedAlignments[Math.floor(Math.random()*this._supportedAlignments.length)],f=this._activeCanvas,I=e.getContext("2d"),v=this._current,b=this._index,y=this.options.zoomFactor;this.options.randomizeZoom&&Math.round(Math.random())&&(y=2-y),e.width<700&&(y=y<1?1-2*(y=1-y):1+2*(y=1-y)),a=1,s=0,n=1,(r=y)>1?s=Math.abs(y-1)/this.options.duration:(n=a=1-y+1,s=(1-y)/this.options.duration,r=1),o=null,l=0,g=0,h=t?1e3:0,d=this.options.duration-1e3,m=!1,c=!1,u=!1,_=this,this._resumeAnimationCallbacks[f]=function(){c=!0,_._animationIDs[f]=requestAnimationFrame(i)},this._updateCanvasDimensionsCallbacks[f]=function(){v=_.getCurrentImageDimensions(_._images[b],e)},this._animationIDs[f]=requestAnimationFrame(i)}}),Gallery.Image.Share=WCF.Message.Share.Content.extend({_smallImageURL:"",_largeImageURL:"",_imageID:0,init:function(e,t,i){this._imageID=e,this._smallImageURL=t,this._largeImageURL=i,this._super()},_click:function(e){var t,i,a,s;e.preventDefault(),i=(t=$(e.currentTarget).prop("href")).hashCode(),void 0===this._cache[i]?(a=!1,null===this._dialog?(this._dialog=$("").hide().appendTo(document.body),a=!0):this._dialog.empty(),s=$('").appendTo(this._dialog),$('').attr("value",t).appendTo(s),this._smallImageURL?(s=$('").appendTo(this._dialog),$('').attr("value","[image='"+this._imageID+"',small][/image]").appendTo(s),s=$('").appendTo(this._dialog),$('').attr("value","[image='"+this._imageID+"',large][/image]").appendTo(s),s=$('").appendTo(this._dialog),$('').attr("value",'').appendTo(s),s=$('").appendTo(this._dialog),$('').attr("value",'').appendTo(s)):(s=$('").appendTo(this._dialog),$('').attr("value","[url='"+t+"'][img]"+this._largeImageURL+"[/img][/url]").appendTo(s),s=$('").appendTo(this._dialog),$('').attr("value",'').appendTo(s)),this._cache[i]=this._dialog.html(),a?this._dialog.wcfDialog({title:WCF.Language.get("wcf.message.share")}):this._dialog.wcfDialog("open")):this._dialog.html(this._cache[i]).wcfDialog("open"),this._enableSelection()}}),Gallery.Image.Slideshow={_didInit:!1,init:function(){this._didInit||(this._didInit=!0,this._domNodeInserted(),WCF.DOMNodeInsertedHandler.addCallback("Gallery.Image.Slideshow",$.proxy(this._domNodeInserted,this)))},_domNodeInserted:function(){$(".jsGalleryAlbumImageViewer").removeClass("jsGalleryAlbumImageViewer").wcfImageViewer({className:"gallery\\data\\album\\AlbumAction"}),$(".jsGalleryCategoryImageViewer").removeClass("jsGalleryCategoryImageViewer").wcfImageViewer({className:"gallery\\data\\category\\GalleryCategoryAction"}),document.querySelectorAll(".jsGalleryUserImageViewer").forEach((e=>{e.classList.remove("jsGalleryUserImageViewer");parseInt(e.dataset.objectId,10)&&$(e).wcfImageViewer({className:"gallery\\data\\image\\ImageAction"})}))}},Gallery.Image.Upload=WCF.Upload.Parallel.extend({_archiveUploadSuccess:null,_imageHandler:null,_listItems:{},_maxParallelUploads:0,_outstandingUploads:0,_quotaExceededError:null,_thumbnailGenerator:null,_tooManyImagesError:null,_visibleArchiveUploadSuccess:!1,_uploadRequests:[],init:function(e,t){this._imageHandler=e,this._maxParallelUploads=t,this._outstandingUploads=0,this._uploadRequests=[],this._super($("#thumbnailList"),$("#thumbnailList"),"gallery\\data\\image\\ImageAction")},_abortUpload:function(e){var t=$(e.currentTarget.parentNode);this._uploadRequests[~~t.data("internalFileID")].abort(),t.remove()},_createButton:function(){var e;this._supportsAJAXUpload?(this._fileUpload=$('"),this._fileUpload.change($.proxy(this._upload,this)),(e=$('
').insertBefore(this._fileListSelector.find(".jsImageUpload"));return $.getLength(this._imageHandler.getImages())||t.on("didLoadImage",$.proxy(this._imageHandler.setFirstImageActive,this._imageHandler)),t.children(".galleryAbortUpload").on("click",this._abortUpload.bind(this)),t},_removeButton:function(){this._buttonSelector.find(".jsImageUpload").remove()},_processUploadedImage:function(e,t){var i,a,s,n,r,o,l=this._uploadMatrix[t],g={resize:1,rotate:1,thumbnails:1,watermarks:e.delayWatermarks?0:1};if(e.images&&e.images[t])i=e.images[t],this._imageHandler.addImage(i.imageID,new Gallery.Image.Handler.Image(i.imageID,i,l)),this._imageHandler.getImageProcessor().addImage(i.imageID,!1,g);else if(e.archiveImages&&e.archiveImages[t]){for(a in l.remove(),this._archiveUploadSuccess||(this._archiveUploadSuccess=new WCF.System.Notification(WCF.Language.get("gallery.image.upload.archive.success"))),this._visibleArchiveUploadSuccess||(this._visibleArchiveUploadSuccess=!0,this._archiveUploadSuccess.show($.proxy(this._setArchiveUploadSuccessHidden))),e.archiveImages[t])i=e.archiveImages[t][a],l=$("").data("imageID",a).data("imageData",i).on("didLoadImage",$.proxy(this._imageHandler.setFirstImageActive,this._imageHandler)).append($('')),this._fileListSelector.find(".jsImageUpload").before(l),this._listItems[a]=l,this._imageHandler.addImage(i.imageID,new Gallery.Image.Handler.Image(i.imageID,i,l)),this._imageHandler.getImageProcessor().addImage(i.imageID,!1,g);if(this._imageHandler.getImageProcessor().startProcessor(),e.archiveErrors[t]&&e.archiveErrors[t].files&&e.archiveErrors[t].files.length){for(r in s=$('').text(e.archiveErrors[t].errorMessage),n=$('
').appendTo(s),e.archiveErrors[t].files)n.append($("").text(e.archiveErrors[t].files[r].errorMessage));this._imageHandler.addError(s)}}e.errors&&e.errors[t]&&(e.archiveImages&&!e.archiveImages[t]&&(o=l.next("li"),l.remove(),o&&o.data("imageID")&&o.on("didLoadImage",$.proxy(this._imageHandler.setFirstImageActive,this._imageHandler))),this._imageHandler.addError(e.errors[t].errorMessage)),this._imageHandler.setUserImageCount(e.userImageCount)},_processUploadedVideo:function(e,t){var i,a=this._uploadMatrix[t];e.videos&&e.videos[t]&&(i=e.videos[t],this._imageHandler.addImage(i.imageID,new Gallery.Image.Handler.Image(i.imageID,i,a)),this._imageHandler.getActiveImage()||this._imageHandler.setFirstImageActive()),e.errors&&e.errors[t]&&(this._imageHandler.addError(e.errors[t].errorMessage),a.remove()),this._imageHandler.setUserUploadedVideoCount(e.userVideoCount)},_progress:function(e,t){this._super(e,t);var i=this._uploadMatrix[e].find("progress");i.next("span").text(i.attr("value")+"%")},_sendRequest:function(e,t){0===this._outstandingUploads&&this._imageHandler.startUpload(),this._outstandingUploads++,this._uploadRequests[e]=this._super(e,t)},_success:function(e,t){if(this._outstandingUploads--,0===this._outstandingUploads&&this._imageHandler.finishUpload(),"abort"!==this._uploadRequests[e].status&&t.returnValues){var i=this._uploadMatrix[e];switch(i.find(".galleryUploadProgress").remove(),i.find(".galleryAbortUpload").remove(),t.returnValues.uploadType){case"video":this._processUploadedVideo(t.returnValues,e);break;case"image":this._processUploadedImage(t.returnValues,e);break;default:throw new Error("Unknown upload type '"+t.returnValues.uploadType+"'.")}this._imageHandler.updateRestrictions(t.returnValues.restrictions),WCF.DOMNodeInsertedHandler.execute()}},_upload:function(){var e,t=this._fileUpload.prop("files");t.length>this._maxParallelUploads?$('').text(WCF.Language.get("gallery.image.upload.error.maxParallelFileUpload")).insertBefore($("#thumbnailListContainer")).click((function(){this.remove()})):t.length>this._imageHandler.getFreeImageCount()+this._imageHandler.getFreeUploadedVideoCount()?(e=WCF.Language.get("gallery.image.upload.error.tooManyImageSelected",{imageCount:t.length,maximumImageCount:this._imageHandler.getFreeImageCount()}),$('').text(e).insertBefore($("#thumbnailListContainer")).click((function(){this.remove()}))):this._super(),this._fileUpload&&(this._removeButton(),this._createButton())},_setArchiveUploadSuccessHidden:function(){this._visibleArchiveUploadSuccess=!1},hideUploadButton:function(){this._buttonSelector.find(".jsImageUpload").hide()},showUploadButton:function(){this._buttonSelector.find(".jsImageUpload").show()}}),Gallery.Image.Processor=Class.extend({_imageHandler:null,_queue:{},_proxy:null,init:function(e){this._imageHandler=e,this._proxy=new WCF.Action.Proxy({showLoadingOverlay:!1,success:$.proxy(this._success,this)})},_sendRequest:function(){var e,t,i=this._queue;for(t in this._queue={},e=[],i)e.push(t);this._proxy.setOption("data",{actionName:"processImages",className:"gallery\\data\\image\\ImageAction",objectIDs:e,parameters:{queue:i}}),this._proxy.sendRequest()},_success:function(e,t,i){var a,s,n,r,o,l,g,h,d;for(a in e.returnValues.errors)this._imageHandler.addError(e.returnValues.errors[a]),(n=(s=this._imageHandler.getImage(a)).getThumbnailContainer().next("li"))&&n.data("imageID")&&n.on("didLoadImage",$.proxy(this._imageHandler.setFirstImageActive,this._imageHandler)),this._imageHandler.removeImage(a);for(a in e.returnValues.queue){for(o in r=e.returnValues.queue[a],s=this._imageHandler.getImage(a),e.returnValues.imageData[a])s.set(o,e.returnValues.imageData[a][o]);l=parseInt(r.resize),g=parseInt(r.rotate),h=parseInt(r.thumbnails),d=parseInt(r.watermarks),l||g||h||d?this._queue[a]={resize:l,rotate:g,thumbnails:h,watermarks:d}:(r.tinyURL&&s.set("tinyURL",r.tinyURL),s.showTinyThumbnail())}$.getLength(this._queue)?this._sendRequest():WCF.System.Event.fireEvent("com.woltlab.gallery.image.processor","finishedProcessing")},addImage:function(e,t,i){this._queue[e]||(this._queue[e]={resize:1,rotate:1,thumbnails:1,watermarks:1},$.isPlainObject(i)&&(this._queue[e]=i),t||this.startProcessor())},startProcessor:function(){$.getLength(this._queue)&&this._sendRequest()}}),Gallery.Image.ThumbnailGenerator=Class.extend({generateThumbnails:function(e,t,i){i=i||!1,new WCF.Action.Proxy({autoSend:!0,data:{actionName:"generateThumbnails",className:"gallery\\data\\image\\ImageAction",objectIDs:[e],parameters:{refresh:i}},showLoadingOverlay:!1,success:$.proxy((function(i,a,s){i.returnValues.pendingThumbnails?this.generateThumbnails(e,t):$.isFunction(t)&&t(e,i.returnValues)}),this)})}}),Gallery.Image.Handler.Image=Class.extend({_createThumbnail:!1,_data:{},_errors:{},_imageID:0,_imageHandler:null,_removeImageIcon:null,_thumbnail:null,_thumbnailContainer:null,init:function(e,t,i,a){if(this._imageID=e,this._data=t||{},this._thumbnailContainer=i,this._createThumbnail=a||!1,this._thumbnailContainer&&this._thumbnailContainer.children("img").length?this._thumbnail=this._thumbnailContainer.children("img").eq(0):this._thumbnail=null,this._thumbnail)this._thumbnail.click($.proxy(this._editImage,this));else if(this._createThumbnail){this._thumbnailContainer=$("");var s=$("#thumbnailList > .jsImageUpload");s.length?this._thumbnailContainer.insertBefore(s):this._thumbnailContainer.appendTo($("#thumbnailList")),this._addThumbnail(this._thumbnailContainer)}else this._data.isVideo&&(this._addThumbnail(this._thumbnailContainer),this._thumbnailContainer.click($.proxy(this._editImage,this)));this._thumbnailContainer.data({imageData:t,imageID:e})},_addThumbnail:function(e){if(this._thumbnail)this._thumbnail.attr("src",this.get("tinyURL")+"?date="+Date.now());else{e.children(".fa-spinner").remove(),this._thumbnail=$('').appendTo(e),this._thumbnail.click($.proxy(this._editImage,this));var t=$('
').appendTo(e);this._removeImageIcon=$('').data("imageID",this.getImageID()),this._imageHandler&&this._removeImageIcon.click($.proxy(this._imageHandler.removeImageByClick,this._imageHandler)),t.append($("").append(this._removeImageIcon)),e.append(t),e.trigger("didLoadImage")}},_editImage:function(){this._imageHandler.setActiveImage(this)},addError:function(e,t){this._errors[e]=t},get:function(e){return void 0!==this._data[e]?this._data[e]:null},getData:function(){return this._data},getErrors:function(){return this._errors},getImageID:function(){return this._imageID},getImageHandler:function(){return this._imageHandler},getThumbnail:function(){return this._thumbnail},getThumbnailContainer:function(){return this._thumbnailContainer},getType:function(){return this._data.isVideo?"video":this._data.isVideoLink?"videoLink":"image"},remove:function(){this._thumbnailContainer.remove()},removeThumbnail:function(){if(!this._data.isVideo)throw new Error("The thumbnail may only be removed from videos.");this._thumbnail.remove(),this._thumbnail=null},set:function(e,t){this._data[e]=t},setData:function(e){this._data=e},setErrors:function(e){this._errors=e},setImageHandler:function(e){this._imageHandler=e,this._removeImageIcon&&this._removeImageIcon.click($.proxy(this._imageHandler.removeImageByClick,this._imageHandler))},showTinyThumbnail:function(){this._addThumbnail(this._thumbnailContainer)},validate:function(){var e,t;for(t in this.setErrors({}),e=this._imageHandler.getActiveImageDataHandlers())if(!e[t].validateData(this))return this._thumbnailContainer&&this._thumbnailContainer.addClass("imageError"),!1;return this._thumbnailContainer.hasClass("imageError")&&this._thumbnailContainer.removeClass("imageError"),!0}}),Gallery.Image.Clipboard=Class.extend({_categoryID:0,_environment:"category",_updateHandler:null,init:function(e,t,i){this._updateHandler=e,this._environment=t,this._categoryID=i||0,this._dialog=$("").appendTo(document.body),this._proxy=new WCF.Action.Proxy({success:$.proxy(this._success,this)}),require(["EventHandler"],function(e){e.add("com.woltlab.wcf.clipboard","com.woltlab.gallery.image",this._clipboardAction.bind(this))}.bind(this))},_clipboardAction:function(e){var t,i;if("com.woltlab.gallery.image.moveToAlbum"===e.data.actionName)this._proxy.setOption("data",{actionName:"prepareMoveToAlbum",className:"gallery\\data\\image\\ImageAction",objectIDs:e.data.parameters.objectIDs}),this._proxy.sendRequest();else if(e.responseData&&e.responseData.returnValues&&e.responseData.returnValues.imageData)for(i in t=e.responseData.returnValues.imageData)t.hasOwnProperty(i)&&this._updateHandler.update(i,t[i])},_moveToAlbum:function(e){this._proxy.setOption("data",{actionName:"moveToAlbum",className:"gallery\\data\\image\\ImageAction",objectIDs:this._dialog.data("objectIDs"),parameters:{albumID:parseInt(this._dialog.find("#albumID").val())}}),this._proxy.sendRequest(),this._dialog.wcfDialog("close")},_success:function(e,t,i){switch(e.actionName){case"prepareMoveToAlbum":this._dialog.data("objectIDs",e.objectIDs).html(e.returnValues.template),this._dialog.wcfDialog({title:WCF.Language.get("gallery.image.moveToAlbum")}),this._dialog.find(".formSubmit > input[type=submit]").click($.proxy(this._moveToAlbum,this));break;case"moveToAlbum":window.location.reload()}}}),Gallery.Image.UpdateHandler=Class.extend({_images:{},init:function(){$(".galleryImage").each($.proxy((function(e,t){var i=$(t);this._images[i.data("objectID")]=i}),this))},update:function(e,t){if(this._images[e])for(var i in t)this._updateProperty(e,i,t[i]);else console.debug("[Gallery.Image.UpdateHandler] Unknown image id "+e)},_updateProperty:function(e,t,i){switch(t){case"deleted":this._delete(e,i);break;case"deleteNote":this._deleteNote(e,i);break;case"isDeleted":i?this._trash(e):this._restore(e);break;case"isDisabled":i?this._disable(e):this._enable(e);break;default:this._handleCustomProperty(e,t,i)}},_handleCustomProperty:function(e,t,i){this._images[e].trigger("imageUpdateHandlerProperty",[e,t,i])},_delete:function(e,t){},_deleteNote:function(e,t){},_disable:function(e){this._images[e].data("isDisabled",1)},_enable:function(e){this._images[e].data("isDisabled",0)},_restore:function(e){this._images[e].data("isDeleted",0)},_trash:function(e){this._images[e].data("isDeleted",1)},getValue:function(e,t){if(this._images[e])switch(t){case"isDeleted":return this._images[e].data("isDeleted");case"isDisabled":return this._images[e].data("isDisabled")}else console.debug("[Gallery.Image.UpdateHandler] Unknown image id "+e)}}),Gallery.Image.UpdateHandler.ImageList=Gallery.Image.UpdateHandler.extend({_delete:function(e,t){this._images[e].remove(),delete this._images[e],WCF.Clipboard.reload()},_disable:function(e){this._super(e),this._images[e].addClass("imageDisabled")},_enable:function(e){this._super(e),this._images[e].removeClass("imageDisabled")},_restore:function(e){this._super(e),this._images[e].removeClass("imageDeleted")},_trash:function(e){this._super(e),this._images[e].data("canViewDeletedImage")||window.location.reload(),this._images[e].addClass("imageDeleted")}}),Gallery.Image.UpdateHandler.Image=Gallery.Image.UpdateHandler.extend({_delete:function(e,t){new WCF.PeriodicalExecuter((function(e){e.stop(),window.location=t}),1e3)},_deleteNote:function(e,t){$('
'+t+"
").insertBefore($(".galleryImageContainer > .galleryImageLikesSummery"))},_disable:function(e){this._super(e),$(".galleryImageHeadline").addClass("messageDisabled")},_enable:function(e){this._super(e),$(".galleryImageHeadline").removeClass("messageDisabled")},_restore:function(e){this._super(e),$(".galleryImageHeadline").removeClass("messageDeleted"),this._images[e].parent().find(".galleryImageDeleteNote").remove()},_trash:function(e){this._super(e),$(".galleryImageHeadline").addClass("messageDeleted")}}),Gallery.Image.DataHandler={},Gallery.Image.DataHandler.Base=Class.extend({_data:{},_imageHandler:null,_overwriteIcons:[],init:function(){this._data={},this._imageHandler=null,this._overwriteIcons=[],WCF.System.Event.addListener("com.woltlab.gallery.imageHandler","overwriteData",$.proxy(this._overwriteData,this))},_overwriteData:function(){},_toggleOverwriteIcons:function(){var e;if(1==$.getLength(this._imageHandler.getImages()))for(e in this._overwriteIcons)this._overwriteIcons[e].hide();else for(e in this._overwriteIcons)this._overwriteIcons[e].show()},getData:function(){return this._data},getImageHandler:function(){return this._imageHandler},readData:function(){},setImageHandler:function(e){this._imageHandler=e,this._imageHandler.registerCallback("addImage",$.proxy(this._toggleOverwriteIcons,this)),this._imageHandler.registerCallback("removeImage",$.proxy(this._toggleOverwriteIcons,this))},setInactive:function(){},updateData:function(){},validateData:function(e){return!0}}),Gallery.Image.DataHandler.Default=Gallery.Image.DataHandler.Base.extend({_categoryIDs:[],_categoryIDsError:null,_descriptionError:null,_maxDescriptionLength:0,_titleError:null,_useTitleAsFilename:null,init:function(e,t){var i,a,s,n;this._super(),this._categoryIDs=e,this._maxDescriptionLength=t,i=$('').click($.proxy(this._overwriteTitle,this)),this._overwriteIcons.push(i),(a=$("#title").parent().prev("dt")).children("label").css("display","inline-block"),a.append(i),s=$('').click($.proxy(this._overwriteCategories,this)),this._overwriteIcons.push(s),$("#flexibleCategoryList").prev(".sectionTitle").append(s),n=$('').click($.proxy(this._overwriteDescription,this)),this._overwriteIcons.push(n),(a=$("#text").parents("dl:eq(0)").prev(".sectionTitle")).children("label").css("display","inline-block"),a.append(n),this._useTitleAsFilename=$("#useFilenameAsTitle"),this._useTitleAsFilename.on("change",$.proxy(this._change,this))},_change:function(e){var t,i;$(e.currentTarget).is(":checked")?(i=(t=this.getImageHandler().getActiveImage()).get("filename"),t.get("isVideo")&&(i=t.get("videoFilename")),i=i.substr(0,i.lastIndexOf(".")),$("#title").val(i).disable()):$("#title").val("").enable()},_getCategoryIDs:function(){var e=[];return $('input[name="categoryIDs[]"]').each((function(t,i){var a=$(i);a.prop("checked")&&e.push(parseInt(a.val()))})),e},_hideCategoryIDsError:function(){null!==this._categoryIDsError&&this._categoryIDsError.hide()},_hideDescriptionError:function(){null!==this._descriptionError&&this._descriptionError.hide()},_hideTitleError:function(){null!==this._titleError&&this._titleError.hide()},_needCategoriesOverwriteConfirmation:function(){var e,t,i=this.getImageHandler().getImages();for(e in i)if(this.getImageHandler().getActiveImage().getImageID()!=e&&(t=i[e].get("categoryIDs"))&&t.length)return!0;return!1},_needDescriptionOverwriteConfirmation:function(){var e,t=this.getImageHandler().getImages();for(e in t)if(this.getImageHandler().getActiveImage().getImageID()!=e&&$.trim(t[e].get("description")))return!0;return!1},_needTitleOverwriteConfirmation:function(){var e,t=this.getImageHandler().getImages();for(e in t)if(this.getImageHandler().getActiveImage().getImageID()!=e&&t[e].get("title"))return!0;return!1},_overwriteCategories:function(e){e.preventDefault(),this._needCategoriesOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.categoryIDs.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setCategoryIDs()}),this)):this._setCategoryIDs()},_overwriteData:function(){this._setCategoryIDs(!1),this._setDescription(!1),this._setTitle(!1)},_overwriteDescription:function(e){e.preventDefault(),this._needDescriptionOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.description.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setDescription()}),this)):this._setDescription()},_overwriteTitle:function(e){e.preventDefault(),this._needTitleOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.title.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setTitle()}),this)):this._setTitle()},_setCategoryIDs:function(e){var t,i,a;for(a in void 0===e&&(e=!0),t=this._getCategoryIDs(),i=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=a&&i[a].set("categoryIDs",t);e&&(new WCF.System.Notification).show()},_setDescription:function(e){var t,i,a;for(a in void 0===e&&(e=!0),t=$("#text").redactor("code.get"),i=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=a&&i[a].set("description",t);e&&(new WCF.System.Notification).show()},_setTitle:function(e){var t,i,a,s,n,r;for(s in void 0===e&&(e=!0),t=this._useTitleAsFilename.is(":checked"),i=$("#title").val(),a=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=s&&((n=a[s]).set("useFilenameAsTitle",t?1:0),r="",t&&(r=n.get("filename"),n.get("isVideo")&&(r=n.get("videoFilename")),r=r.substr(0,r.lastIndexOf("."))),n.set("title",t?r:i));e&&(new WCF.System.Notification).show()},_showCategoryIDsError:function(e){null===this._categoryIDsError&&(this._categoryIDsError=$('').hide(),$("#flexibleCategoryList").after(this._categoryIDsError)),this._categoryIDsError.text(e).show()},_showDescriptionError:function(e){null===this._descriptionError&&(this._descriptionError=$('').hide(),$("#text").closest("dd").append(this._descriptionError)),this._descriptionError.text(e).show()},_showTitleError:function(e){null===this._titleError&&(this._titleError=$('').hide(),$("#title").after(this._titleError)),this._titleError.text(e).show()},readData:function(){var e=this.getImageHandler().getActiveImage().get("isVideoLink");!e&&this._useTitleAsFilename.is(":checked")&&(e=1),this._data={categoryIDs:this._getCategoryIDs(),description:$("#text").redactor("code.get"),title:$("#title").val(),useFilenameAsTitle:e}},updateData:function(){var e,t,i,a;$(window).resize(),e=this.getImageHandler().getActiveImage().getData(),this._data={categoryIDs:e.categoryIDs||[],description:e.description||"",title:e.title||"",useFilenameAsTitle:e.useFilenameAsTitle||0},e.isVideoLink?(this._data.useFilenameAsTitle=0,this._useTitleAsFilename.closest("label").hide()):this._useTitleAsFilename.closest("label").show(),void 0!==(t=this.getImageHandler().getActiveImage().getErrors()).categoryIDs?this._showCategoryIDsError(t.categoryIDs):this._hideCategoryIDsError(),void 0!==t.description?this._showDescriptionError(t.description):this._hideDescriptionError(),void 0!==t.title?this._showTitleError(t.title):this._hideTitleError(),this._useTitleAsFilename.prop("checked",!!this._data.useFilenameAsTitle),this._data.useFilenameAsTitle?(i=e.filename,e.isVideo&&(i=e.videoFilename),i=i.substr(0,i.lastIndexOf(".")),$("#title").val(i).disable()):$("#title").val(this._data.title).enable(),$('input[name="categoryIDs[]"]').each($.proxy((function(e,t){var i=$(t);-1==this._data.categoryIDs.indexOf(parseInt(i.val()))?i.prop("checked",!1):i.prop("checked",!0)}),this));try{$("#text").redactor("code.set",this._data.description)}catch(e){}a=$(document).scrollTop(),$("#title").focus().blur(),$(document).scrollTop(a)},validateData:function(e){var t,i=e.getData(),a=!0;if(void 0===i.title||""==i.title?(e.addError("title",WCF.Language.get("wcf.global.form.error.empty")),a=!1):i.title.length>255&&(e.addError("title",WCF.Language.get("gallery.image.title.error.tooLong")),a=!1),void 0===i.description||null===i.description?i.description="":i.description.length>this._maxDescriptionLength&&(e.addError("description",WCF.Language.get("gallery.image.description.error.tooLong")),a=!1),void 0!==i.categoryIDs&&i.categoryIDs.length){for(t in i.categoryIDs)if(-1==this._categoryIDs.indexOf(i.categoryIDs[t])){e.addError("categoryIDs",WCF.Language.get("wcf.global.form.error.noValidSelection")),a=!1;break}}else e.addError("categoryIDs",WCF.Language.get("wcf.global.form.error.empty")),a=!1;return a}}),Gallery.Image.DataHandler.EnableComments=Gallery.Image.DataHandler.Base.extend({init:function(){this._super();var e=$('').click($.proxy(this._click,this));this._overwriteIcons.push(e),$("#enableComments").closest("label").append(e),WCF.DOMNodeInsertedHandler.execute()},_click:function(e){e.preventDefault(),this._needOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.enableComments.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setEnableComments()}),this)):this._setEnableComments()},_needOverwriteConfirmation:function(){var e,t=$("#enableComments").is(":checked")?1:0,i=this.getImageHandler().getImages();for(e in i)if(this.getImageHandler().getActiveImage().getImageID()!=e&&i[e].get("enableComments")!=t)return!0;return!1},_overwriteData:function(){this._setEnableComments(!1)},_setEnableComments:function(e){var t,i;for(i in void 0===e&&(e=!0),t=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=i&&t[i].set("enableComments",$("#enableComments").is(":checked")?1:0);e&&(new WCF.System.Notification).show()},readData:function(){this._data={enableComments:$("#enableComments").is(":checked")?1:0}},updateData:function(){var e=this.getImageHandler().getActiveImage().getData();this._data={enableComments:void 0!==e.enableComments?e.enableComments:1},$("#enableComments").prop("checked",!!this._data.enableComments)}}),Gallery.Image.DataHandler.Album=Gallery.Image.DataHandler.Base.extend({_albumIDError:null,_albumIDs:[],_maxAlbums:0,_systemNotification:null,init:function(e,t){var i,a,s;if(this._super(),this._albumIDs=e,this._maxAlbums=t,this._albumIDError=null,i=$('').click($.proxy(this._click,this)),this._overwriteIcons.push(i),(a=$("#albumID").parent().prev("dt")).children("label").css("display","inline-block"),a.append(i),!this._albumIDs.length)for(s in $("#albumID").hide(),this._overwriteIcons)this._overwriteIcons[s].hide();e.length').click($.proxy(this._addAlbum,this)).css("margin-left","5px"),$("#albumID").after(this._albumAddIcon)),WCF.DOMNodeInsertedHandler.execute()},_addAlbum:function(e){this._albumDialog.show()},_addNewAlbum:function(e){if(this._albumIDs.push(parseInt(e.albumID)),1==this._albumIDs.length&&($("#albumID").show(),$.getLength(this._imageHandler.getImages())>1))for(var t in this._overwriteIcons)this._overwriteIcons[t].show();$("#albumID").append($('').text(e.title)).val(e.albumID),this._albumIDs.length>=this._maxAlbums?(this._albumAddIcon.remove(),new WCF.System.Notification(WCF.Language.get("gallery.image.upload.albumLimitReached"),"warning").show(void 0,5e3)):(null===this._systemNotification&&(this._systemNotification=new WCF.System.Notification),this._systemNotification.show())},_click:function(e){e.preventDefault(),this._needOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.albumID.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setAlbumID()}),this)):this._setAlbumID()},_hideAlbumIDError:function(){null!==this._albumIDError&&this._albumIDError.hide()},_needOverwriteConfirmation:function(){var e,t=this.getImageHandler().getImages();for(e in t)if(this.getImageHandler().getActiveImage().getImageID()!=e&&t[e].get("albumID"))return!0;return!1},_overwriteData:function(){this._setAlbumID(!1)},_setAlbumID:function(e){var t,i;for(i in void 0===e&&(e=!0),t=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=i&&t[i].set("albumID",parseInt($("#albumID").val()||0));e&&(new WCF.System.Notification).show()},_showAlbumIDError:function(e){null===this._albumIDError&&(this._albumIDError=$('').hide(),$("#albumID").parent().append(this._albumIDError)),this._albumIDError.text(e).show()},_toggleOverwriteIcons:function(){this._albumIDs.length&&this._super()},readData:function(){this._data={albumID:parseInt($("#albumID").val()||0)}},updateData:function(){var e,t=this.getImageHandler().getActiveImage().getData();this._data={albumID:t.albumID||0},$("#albumID").val(this._data.albumID),void 0!==(e=this.getImageHandler().getActiveImage().getErrors()).albumID?this._showAlbumIDError(e.albumID):this._hideAlbumIDError()},validateData:function(e){var t=e.getData();return!t.albumID||-1!=this._albumIDs.indexOf(t.albumID)||(e.addError("albumID",WCF.Language.get("wcf.global.form.error.noValidSelection")),!1)}}),Gallery.Image.DataHandler.Tagging=Gallery.Image.DataHandler.Base.extend({init:function(){var e;this._super(),e=$('').click($.proxy(this._click,this)),this._overwriteIcons.push(e),$("#tagSearchInput").closest("dl").children("dt").children("label").css("display","inline-block").append(e)},_click:function(e){e.preventDefault(),this._needOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.tags.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setTags()}),this)):this._setTags()},_getTags:function(){var e,t,i=require("WoltLabSuite/Core/Ui/ItemList").getValues("tagSearchInput"),a=[];for(e=0,t=i.length;e').click($.proxy(this._click,this));this._overwriteIcons.push(e),$("#mapContainer").parents(".section:eq(0)").children(".sectionTitle").append(e),this._useCoordinates=$("#useCoordinates").change($.proxy(this._change,this)),WCF.System.Event.addListener("com.woltlab.wcf.googleMaps","authenticationFailure",this._disable.bind(this))},_change:function(e){this._useCoordinates.prop("checked")?($(".jsCoordinatesField").show(),this._locationInput.getMap().refresh()):$(".jsCoordinatesField").hide()},_click:function(e){e.preventDefault(),this._needOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.coordinates.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setCoordinates()}),this)):this._setCoordinates()},_disable:function(){$("#mapContainer").closest("section").remove(),this.getImageHandler().removeDataHandler("location")},_initLocation:function(e){if(0!=e.get("latitude")&&0!=e.get("longitude")&&!e.get("location")){var t=e.getImageID();WCF.Location.GoogleMaps.Util.reverseGeocoding($.proxy((function(e){if(e){var i=this.getImageHandler().getImage(t);i.set("__useCoordinates",!0),i.set("location",e)}}),this),null,e.get("latitude"),e.get("longitude"))}},_needOverwriteConfirmation:function(){var e,t=this.getImageHandler().getImages();for(e in t)if(this.getImageHandler().getActiveImage().getImageID()!=e&&0!=t[e].get("latitude")&&0!=t[e].get("longitude"))return!0;return!1},_overwriteData:function(){this._setCoordinates(!1)},_setCoordinates:function(e){var t,i,a,s,n,r;for(n in void 0===e&&(e=!0),t=WCF.Location.GoogleMaps.Util.getMarkerPosition(this._locationInput.getMarker()),i=this._useCoordinates.prop("checked"),a=this.getImageHandler().getImages(),s=$.trim($("#geocode").val()),a)this.getImageHandler().getActiveImage().getImageID()!=n&&((r=a[n]).set("latitude",t.latitude),r.set("location",s),r.set("longitude",t.longitude),r.set("__useCoordinates",i?1:0));e&&(new WCF.System.Notification).show()},readData:function(){this._data=WCF.Location.GoogleMaps.Util.getMarkerPosition(this._locationInput.getMarker()),this._data.location=$("#geocode").val(),this._data.__useCoordinates=this._useCoordinates.prop("checked")?1:0},setImageHandler:function(e){this._super(e),null!==this._locationInput?this._imageHandler.registerCallback("addImage",$.proxy(this._initLocation,this)):this._disable()},updateData:function(){var e=this.getImageHandler().getActiveImage().getData();this._data={latitude:e.latitude||0,location:e.location||"",longitude:e.longitude||0,__useCoordinates:void 0!==e.__useCoordinates?e.__useCoordinates:0!=e.latitude&&0!=e.longitude},0!=this._data.latitude&&0!=this._data.longitude?WCF.Location.GoogleMaps.Util.moveMarker(this._locationInput.getMarker(),this._data.latitude,this._data.longitude,!this._data.location):this._userLatitude&&this._userLongitude?WCF.Location.GoogleMaps.Util.moveMarker(this._locationInput.getMarker(),this._userLatitude,this._userLongitude,!0):WCF.Location.GoogleMaps.Util.moveMarker(this._locationInput.getMarker(),WCF.Location.GoogleMaps.Settings.get("defaultLatitude"),WCF.Location.GoogleMaps.Settings.get("defaultLongitude"),!0),WCF.Location.GoogleMaps.Util.focusMarker(this._locationInput.getMarker()),this._useCoordinates.prop("checked",!!this._data.__useCoordinates),$("#geocode").val(this._data.location),this._change()}}),Gallery.Image.DataHandler.VideoThumbnail=Gallery.Image.DataHandler.Base.extend({_container:null,_deleteButton:null,_thumbnail:null,_upload:null,init:function(){this._container=$("#galleryVideoThumbnailContainer"),this._thumbnail=$("#galleryVideoThumbnailPreview"),this._deleteButton=$("#galleryVideoThumbnailDeleteButton").click(this._deleteThumbnail.bind(this)),require(["WoltLabSuite/Gallery/Ui/Video/Thumbnail/Upload"],function(e){this._upload=new e(this)}.bind(this))},_deleteThumbnail:function(){WCF.System.Confirmation.show(WCF.Language.get("gallery.video.thumbnail.delete.confirmMessage"),$.proxy((function(e){"confirm"===e&&new WCF.Action.Proxy({autoSend:!0,data:{actionName:"deleteVideoThumbnail",className:"gallery\\data\\image\\ImageAction",objectIDs:[this.getImageHandler().getActiveImage().get("imageID")]},success:$.proxy(this._success,this)})}),this))},_success:function(e,t,i){var a=this.getImageHandler().getImage(~~e.returnValues.imageID);a.set("filename",""),a.set("filesize",0),a.set("url",""),a.set("tinyURL",""),this._thumbnail.attr("src",""),this._thumbnail.hide(),this._deleteButton.hide(),a.removeThumbnail()},readData:function(){this._data.url=this._thumbnail.attr("src")},setInactive:function(){this._container.hide()},updateData:function(){var e=this.getImageHandler().getActiveImage().getData();e.filename?(this._thumbnail.attr("src",e.url),this._thumbnail.show(),this._deleteButton.show()):(this._thumbnail.hide(),this._deleteButton.hide()),this._container.show()},updateAfterUpload:function(){this._thumbnail.show(),this._deleteButton.show()}}),Gallery.Image.PendingImageHandler=Class.extend({_imageHandler:null,init:function(e){this._imageHandler=e,$("#loadPendingImages").click($.proxy(this._loadImages,this)),$("#deletePendingImages").click($.proxy(this._deleteImages,this))},_deleteImages:function(){WCF.System.Confirmation.show(WCF.Language.get("gallery.image.pendingImages.delete.confirmMessage"),$.proxy((function(e){"confirm"===e&&($("#loadPendingImages").off("click"),$("#deletePendingImages").off("click"),new WCF.Action.Proxy({autoSend:!0,data:{actionName:"deletePendingImages",className:"gallery\\data\\image\\ImageAction",parameters:{tmpHash:this._imageHandler.getOption("tmpHash")}},success:$.proxy(this._success,this)}))}),this))},_loadImages:function(){$("#loadPendingImages").off("click"),$("#deletePendingImages").off("click"),new WCF.Action.Proxy({autoSend:!0,data:{actionName:"loadPendingImages",className:"gallery\\data\\image\\ImageAction",parameters:{tmpHash:this._imageHandler.getOption("tmpHash")}},success:$.proxy(this._success,this)})},_success:function(e,t,i){switch(e.actionName){case"deletePendingImages":this._imageHandler.updateRestrictions(e.returnValues.restrictions),this._imageHandler.setUserImageCount(e.returnValues.userImageCount),null!==e.returnValues.userUploadedVideoCount&&this._imageHandler.setUserUploadedVideoCount(e.returnValues.userUploadedVideoCount),null!==e.returnValues.userVideoLinkCount&&this._imageHandler.setUserVideoLinkCount(e.returnValues.userVideoLinkCount);break;case"loadPendingImages":if(e.returnValues){for(var a in e.returnValues)this._imageHandler.addImage(a,new Gallery.Image.Handler.Image(a,e.returnValues[a],null,!0));this._imageHandler.getActiveImage()||this._imageHandler.setFirstImageActive()}}(new WCF.System.Notification).show(),$("#pendingImageContainer").remove()}}),Gallery.Image.ThumbnailAreaSelector=Class.extend({_button:null,_imageDimensions:{},_imageDiv:null,_imageHandler:null,_selection:null,init:function(e){this._imageHandler=e,this._overlay=$("#galleryThumbnailAreaSelectorOverlay"),this._overlay.length||(this._overlay=$('').css({height:"100%",zIndex:~~$("#pageHeaderContainer").css("z-index")-2}).appendTo(document.body),this._overlay.attr("aria-hidden","true")),this._imageDiv=$("").css({overflow:"hidden",position:"absolute",zIndex:1+~~this._overlay.css("z-index")}).hide().appendTo(document.body),this._selection=$('').appendTo(this._imageDiv).resizable({aspectRatio:!0,containment:"parent",handles:"n, e, s, w, ne, se, sw, nw",resize:$.proxy(this._updateSelection,this)}).draggable({containment:"parent",drag:$.proxy(this._updateSelection,this)}),this._selection.append($('')),$(window).resize($.proxy(this._resize,this)),this._button=$("#selectThumbnailAreaButton").click($.proxy(this._click,this))},_cancelSelection:function(){var e,t,i,a;require(["WoltLabSuite/Core/Ui/Page/Action"],function(e){e.hide("galleryImageThumbnailAreaChoose"),e.hide("galleryImageThumbnailAreaCancel")}.bind(this)),this._overlay.attr("aria-hidden","true"),this._imageDiv.hide(),(e=this._imageHandler.getActiveImage()).get("thumbnailWidth")&&(t=$("#image"),i=Math.ceil(e.get("thumbnailX")/e.get("width")*t.width()),a=Math.ceil(e.get("thumbnailY")/e.get("height")*t.height()),this._selection.css({"background-position":"-"+i+"px -"+a+"px",height:Math.ceil(e.get("thumbnailHeight")*t.height()/e.get("height")),left:i,top:a,width:Math.ceil(e.get("thumbnailWidth")*t.width()/e.get("width"))}),this._selection.draggable("option","disabled",!0).resizable("option","disabled",!0).addClass("disabled"))},_click:function(e){var t,i;if(this.refresh(null,!0),t=this._imageHandler.getImageNode(),(i=this._imageHandler.getActiveImage()).get("width")>1200&&i.get("height")>900)this._selection.resizable("option","minHeight",Math.floor(t.height()/i.get("height")*Math.min(i.get("height"),900))),this._selection.resizable("option","minWidth",Math.floor(t.width()/i.get("width")*Math.min(i.get("width"),1200)));else if(i.get("width")>560&&i.get("height")>420)this._selection.resizable("option","minHeight",Math.floor(t.height()/i.get("height")*Math.min(i.get("height"),420))),this._selection.resizable("option","minWidth",Math.floor(t.width()/i.get("width")*Math.min(i.get("width"),560)));else{if(!(i.get("width")>280&&i.get("height")>210))return;this._selection.resizable("option","minHeight",Math.floor(t.height()/i.get("height")*Math.min(i.get("height"),210))),this._selection.resizable("option","minWidth",Math.floor(t.width()/i.get("width")*Math.min(i.get("width"),280)))}require(["Language","WoltLabSuite/Core/Ui/Page/Action"],function(e,t){t.has("galleryImageThumbnailAreaChoose")?(t.show("galleryImageThumbnailAreaChoose"),t.show("galleryImageThumbnailAreaCancel")):this._createPageActions(e,t)}.bind(this)),this._overlay.attr("aria-hidden","false"),this._imageDiv.show(),this._selection.draggable("option","disabled",!1).resizable("option","disabled",!1).removeClass("disabled"),this._imageDiv.css("z-index",1+~~this._overlay.css("z-index"))},_createPageActions:function(e,t){var i=elCreate("a");i.textContent=e.get("wcf.global.button.cancel"),i.addEventListener("click",this._cancelSelection.bind(this)),t.add("galleryImageThumbnailAreaCancel",i),(i=elCreate("a")).textContent=e.get("gallery.image.thumbnail.chooseSelection"),i.addEventListener("click",this._saveArea.bind(this)),t.add("galleryImageThumbnailAreaChoose",i)},_resize:function(){var e,t,i,a=this._imageHandler.getImageNode(),s=a.getDimensions();this._selection.is(":visible")&&(e=s.height/this._imageDimensions.height,t=s.width/this._imageDimensions.width,this._selection.height(this._selection.height()*e),this._selection.width(this._selection.width()*t),this._imageDiv.height(this._imageDiv.height()*e),this._imageDiv.width(this._imageDiv.width()*t),i=a.offset(),this._imageDiv.css({left:i.left,top:i.top}),this._selection.css("background-size",s.width+"px "+s.height+"px")),this._imageDimensions=s},_saveArea:function(){var e=this._imageHandler.getActiveImage(),t=this._imageHandler.getImageNode(),i=this._selection.position();e.set("__selectionOutherHeight",this._selection.outerHeight()),e.set("__selectionOutherWidth",this._selection.outerWidth()),e.set("__selectionLeft",i.left),e.set("__selectionTop",i.top),e.set("thumbnailHeight",Math.ceil(this._selection.outerHeight()/t.height()*e.get("height"))),e.set("thumbnailWidth",Math.ceil(this._selection.outerWidth()/t.width()*e.get("width"))),e.set("thumbnailX",Math.ceil(i.left*e.get("width")/t.width())),e.set("thumbnailY",Math.ceil(i.top*e.get("height")/t.height())),e.get("thumbnailWidth")+e.get("thumbnailX")>e.get("width")&&e.set("thumbnailWidth",e.get("width")-e.get("thumbnailX")),e.get("thumbnailHeight")+e.get("thumbnailY")>e.get("height")&&e.set("thumbnailHeight",e.get("height")-e.get("thumbnailY")),require(["WoltLabSuite/Core/Ui/Page/Action"],function(e){e.hide("galleryImageThumbnailAreaChoose"),e.hide("galleryImageThumbnailAreaCancel")}.bind(this)),this._overlay.attr("aria-hidden","true"),this._imageDiv.hide(),this._imageDiv.css("z-index",0)},_updateSelection:function(e,t){this._selection.css({"background-position":"-"+t.position.left+"px -"+t.position.top+"px"})},refresh:function(e,t){var i,a,s,n,r,o=this._imageHandler.getImageNode(),l=this._imageHandler.getActiveImage();if(l.get("width")<=280&&l.get("height")<=210)return this._selection.hide(),void this._button.hide();this._button.show(),i=o.offset(),this._imageDiv.css({height:o.height(),left:i.left,top:i.top,width:o.width()}),(l.get("thumbnailWidth")||t)&&(a=this._imageDiv.height(),s=this._imageDiv.width(),n=0,r=0,l.get("thumbnailWidth")?l.get("__selectionOutherWidth")?(a=l.get("__selectionOutherHeight"),s=l.get("__selectionOutherWidth"),n=l.get("__selectionLeft"),r=l.get("__selectionTop")):(a=Math.ceil(l.get("thumbnailHeight")*o.height()/l.get("height")),s=Math.ceil(l.get("thumbnailWidth")*o.width()/l.get("width")),n=Math.ceil(l.get("thumbnailX")/l.get("width")*o.width()),r=Math.ceil(l.get("thumbnailY")/l.get("height")*o.height())):a/s<3/4?(s=parseInt(4*a/3),n=parseInt((this._imageDiv.width()-s)/2)):(a=parseInt(3*s/4),r=parseInt((this._imageDiv.height()-a)/2)),this._selection.css({"background-image":"url("+o.attr("src")+")","background-position":"-"+n+"px -"+r+"px","background-size":this._imageDiv.width()+"px "+this._imageDiv.height()+"px",height:a,left:n,top:r,width:s}),this._selection.parent().css({"background-color":"rgba(0, 0, 0, 0.5)"})),this._imageDimensions=o.getDimensions()}}),Gallery.Image.Marker={},Gallery.Image.Marker.Editor=Gallery.Image.DataHandler.Base.extend({_disableAdding:!1,_dialog:null,_markers:[],_markerHeight:0,_markerWidth:0,init:function(){$("#image > img").click($.proxy(this._addMarker,this)).droppable({accept:".galleryImageMarker",drop:$.proxy(this._updateMarkerPosition,this),over:function(e,t){t.helper.switchClass("fa-trash","fa-map-marker")},out:function(e,t){t.helper.switchClass("fa-map-marker","fa-trash")},tolerance:"pointer"}),this._proxy=new WCF.Action.Proxy({success:$.proxy(this._success,this),autoAbortPrevious:!0}),$(window).resize($.proxy(this._refreshMarkerPositions,this)),WCF.System.Event.addListener("com.woltlab.gallery.ImageHandler","didRotateImage",$.proxy(this._rotateMarkers,this))},_addMarker:function(e){var t,i;this._disableAdding||(this._disableAdding=!0,this.getImageHandler().getImageNode().position(),t=this._convertClickPositionToDisplayPosition({left:e.offsetX,top:e.offsetY}),i=this._createMarker(t.left,t.top),new WCF.PeriodicalExecuter($.proxy((function(e){this._showDialog(null,i),e.stop()}),this),250))},_addMarkerByData:function(e){this.getImageHandler().getActiveImage();var t,i,a,s=this.getImageHandler().getImageNode();s.width()?(s.off("load",$.proxy(this._addMarkerByData,this,e)),t=this._convertSavePositionToDisplayPosition({left:e.positionX,top:e.positionY}),this._createMarker(t.left,t.top,e),i={left:100,top:100},a=this._convertSavePositionToDisplayPosition(i),this._convertDisplayPositionToSavePosition(a),this.getImageHandler().getActiveImage(),this.getImageHandler().getImageNode()):s.on("load",$.proxy(this._addMarkerByData,this,e))},_changeMarkerType:function(e){"user"==$(e.currentTarget).val()?($("#galleryImageMarkerUser").show(),$("#galleryImageMarkerText").hide()):($("#galleryImageMarkerUser").hide(),$("#galleryImageMarkerText").show()),this._dialog.wcfDialog("render")},_convertClickPositionToDisplayPosition:function(e){this.getImageHandler().getActiveImage();var t=this.getImageHandler().getImageNode();return{left:~~(e.left+t.position().left-this._getMarkerWidth()/2),top:e.top-this._getMarkerHeight()}},_convertDisplayPositionToSavePosition:function(e){var t=this.getImageHandler().getActiveImage(),i=this.getImageHandler().getImageNode(),a=t.get("height")/i.height(),s=t.get("width")/i.width();return{left:~~((e.left-i.position().left+this._getMarkerWidth()/2)*s),top:~~((e.top+this._getMarkerHeight())*a)}},_convertSavePositionToDisplayPosition:function(e){var t=this.getImageHandler().getActiveImage(),i=this.getImageHandler().getImageNode(),a=i.height()/t.get("height"),s=i.width()/t.get("width");return{left:~~(e.left*s+i.position().left-this._getMarkerWidth()/2),top:~~(e.top*a-this._getMarkerHeight())}},_createDialog:function(){this._dialog=$("").appendTo(document.body),this._dialog.append('